﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HomeWork
{
    internal class TokenManager
    {
        internal enum Token
        {
            // 基础权限（2的幂次方）
            SuperAdmin = 1 << 0, // 00001 (1)
            Admin = 1 << 1, // 00010 (2)
            Blogger = 1 << 2, // 00100 (4)
            Newbie = 1 << 3, // 01000 (8)
            Registered = 1 << 4  // 10000 (16)
        }

        // 角色枚举，每个角色是多个权限的组合
        public enum Role
        {
            // 组合权限（位或运算）
            SystemAdmin = Token.SuperAdmin | Token.Admin, // 00011 (3)
            ContentTeam = Token.Admin | Token.Blogger,    // 00110 (6)
            BasicUser = Token.Registered | Token.Newbie // 11000 (24)
        }

        // 私有字段存储当前拥有的权限（初始为空）
        private int _tokens;
        //public tokens currentTokens { 
        //    get=>_tokens; 
        //    set=>_tokens=value; 
        //}


        public void Add(Token token)
        {
            _tokens |= (int)token;
        }

        public void Remove(Token token)
        {

            //_currentTokens ^= token;// 异或结合，如果token存在则移除，否则添加（会出现问题）
            _tokens &= ~(int)token; // 与非结合，正确移除权限
        }

        public bool Has(Token token)
        {
            return (_tokens & (int)token) == (int)token;

        }

        // 分配角色（覆盖现有权限）
        public void AssignRole(Role role) => _tokens = (int)role;

    }
}
